#! /usr/bin/python3
# _*_ coding:utf-8 _*_
"""
    hasattr(object, "name"): 判断一个对象里面是否有name属性或者name方法，返回BOOL值，有name特性返回True， 否则返回False。
    getattr(object, name[,default])：获取对象object的属性或者方法，如果存在打印出来，如果不存在，打印出默认值，默认值可选。
    setattr(object, name, values)：给对象的属性赋值，若属性不存在，先创建再赋值。
"""


class MyObject(object):
    def __init__(self):
        self.x = 9

    def power(self):
        return self.x * self.x


def main():
    obj = MyObject()
    # hasattr(object, "name"): 判断一个对象里面是否有name属性或者name方法，返回BOOL值，有name特性返回True， 否则返回False。
    print(hasattr(obj, 'x'))
    print(hasattr(obj, 'power'))
    print(hasattr(obj, 'y'))
    # getattr(object, name[,default])：获取对象object的属性或者方法，如果存在打印出来，如果不存在，打印出默认值，默认值可选。
    print(getattr(obj, 'x'))
    # print(getattr(obj, 'y'))   # 会有错误 AttributeError:'MyObject' object has no attribute 'y'
    print(getattr(obj, 'y', 'noattribute'))  # 发生错误的时候返回设定值noattribute
    # setattr(object, name, values)：给对象的属性赋值，若属性不存在，先创建再赋值。
    print(setattr(obj, 'y', '18'))
    print(hasattr(obj, 'y'))
    print(getattr(obj, 'y'))
    # getattr() 和 setattr()连用
    getattr(obj, 'z', setattr(obj, 'z', 20))
    print(getattr(obj, 'z'))
    print(type(getattr(obj, 'z')))


if __name__ == '__main__':
    main()
